package com.boot.mall.product.service.impl;

import com.boot.mall.product.entity.AttrEntity;
import com.boot.mall.product.service.AttrService;
import com.boot.mall.product.vo.BaseAttrs;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.boot.common.utils.PageUtils;
import com.boot.common.utils.Query;

import com.boot.mall.product.dao.ProductAttrValueDao;
import com.boot.mall.product.entity.ProductAttrValueEntity;
import com.boot.mall.product.service.ProductAttrValueService;
import org.springframework.transaction.annotation.Transactional;


@Service("productAttrValueService")
public class ProductAttrValueServiceImpl extends ServiceImpl<ProductAttrValueDao, ProductAttrValueEntity> implements ProductAttrValueService {

    @Autowired
    private AttrService attrService;

    // 批量保存商品的基本属性，规格参数
    @Override
    public void saveBaseAttrs(List<BaseAttrs> baseAttrs, Long id) {

        List<ProductAttrValueEntity> list = new ArrayList<>();

        for (BaseAttrs baseAttr : baseAttrs) {
            ProductAttrValueEntity productAttrValueEntity = new ProductAttrValueEntity();
            // 设置spu_id
            productAttrValueEntity.setSpuId(id);
            // 通过attr的id从数据库中查询属性信息
            // TODO 可能需要添加
            AttrEntity attr = attrService.getById(baseAttr.getAttrId());
            // 设置基本属性
            productAttrValueEntity.setAttrId(attr.getAttrId());
            productAttrValueEntity.setAttrName(attr.getAttrName());
            productAttrValueEntity.setAttrValue(baseAttr.getAttrValues());
            productAttrValueEntity.setQuickShow(baseAttr.getShowDesc());
            list.add(productAttrValueEntity);
        }
        // 执行保存
        this.saveBatch(list);
    }

    @Override
    public List<ProductAttrValueEntity> listAttrForSpu(Long spuId) {
        return baseMapper.selectList(new QueryWrapper<ProductAttrValueEntity>().eq("spu_id",spuId));
    }

    @Override
    @Transactional
    public void updateSpuAttr(Long spuId, List<ProductAttrValueEntity> entities) {
        for (ProductAttrValueEntity entity : entities) {
            entity.setSpuId(spuId);
            baseMapper.update(entity,new QueryWrapper<ProductAttrValueEntity>()
                    .eq("attr_id",entity.getAttrId())
                    .eq("spu_id",spuId));
        }
    }
}